import 'dart:convert';
import 'dart:math';
import 'package:crypto/crypto.dart';

// HMAC-SHA256 加密（返回 hex 字符串）
String _hmacSha256(String value, String key) {
  final hmac = Hmac(sha256, utf8.encode(key));
  return hmac.convert(utf8.encode(value)).toString();
}

// 双重 MD5 加密
String _doubleMd5(String input) {
  final firstHash = md5.convert(utf8.encode(input)).toString();
  return md5.convert(utf8.encode(firstHash)).toString();
}

// Base64 编码（与 CryptoJS 行为一致）
String _customBase64(String input) {
  return base64.encode(utf8.encode(input));
}

// 签名生成核心逻辑
Map<String, dynamic> getSign() {
  final random = Random();
  
  // 生成 8 位随机数（补零对齐）
  final randomPart = random.nextInt(100000000).toString().padLeft(8, '0');
  final timestamp = DateTime.now().millisecondsSinceEpoch;
  
  // 构造原始 nonce
  final originalNonce = '$randomPart$timestamp';
  // print('originalNonce=${originalNonce}');
  // 双重 MD5 处理
  final processedNonce = _doubleMd5(originalNonce);
  
  // 构造签名字符串
  final signStr = 'nonce=$processedNonce&timestamp=$timestamp';
  
  // HMAC 密钥（注意 Dart 的字符串转义）
  const hmacKey = r'SimGGx9mZaZfFPSHf1XDCS)ukSs_vQZGz9JSaFWcU(^HFlCEyFHGXa8zoz_5DYL';

  // 生成签名
  final hmacResult = _hmacSha256(signStr, hmacKey);
  final encodedSign = _customBase64(hmacResult);

  return {
    'nonce': originalNonce,
    'timestamp': timestamp,
    'sign': encodedSign,
  };
}
